// 防抖函数使用到了闭包和计时器
// 用途：降低频率，常用于搜索框输入/窗口大小改变/手机号、邮箱验证等功能。
/**
 * @method 防抖函数
 * @param {Function} fn 回调函数
 * @param {number} delay 时间间隔
 * @param {boolean} immediate 是否立即执行
 */
function debounce (fn, delay, immediate) {
  let timer = null
  return function (...args) {
    if (timer) clearTimeout(timer)
    // 立即执行
    if (immediate && !timer) {
      fn.apply(this, args)
    }
    // 1s后再执行一次
    timer = setTimeout(() => {
      fn.apply(this, args)
    }, delay)
  }
}

const btn = document.querySelector('button')
btn.addEventListener('click', debounce(function () {
  console.log('fn防抖执行了')
}, 1000, true))

